package com.gexin.controller.api;

import com.gexin.common.utils.DateUtil;
import com.gexin.common.utils.StringUtil;
import com.gexin.model.order.Order;
import com.gexin.model.order.OrderGroup;
import com.gexin.weixin.uitls.WeiXinTemplateUtils;
import com.gexin.weixin.uitls.WxConfig;
import com.gexin.weixin.uitls.WxTools;
import com.jfinal.log.Log;
import com.jfinal.weixin.sdk.api.TemplateData;

/**
 * 消息推送
 */
public class MsgPush {

	public static final MsgPush api = new MsgPush();

	static final Log log = Log.getLog(MsgPush.class);

	public static final String cache_send_paySuccess_key = "cache:msg:send:pay:";//键

	public static final String cache_send_express_key = "cache:msg:send:express:";//键

	public static final int cache_send_time = 3600 * 24 * 15;//15天发一次短信
	
	public static final Boolean is_sendMsg = true;//15天发一次短信

	/**
	 * 订单退款提醒
	 */
	public void orderRefund(Order order) {
		// 微信公众号
		if (Order.plateform_Weixin == order.getOrderPlatform()) {
			// 推送模板消息
			TemplateData t = TemplateData.New();
			t.setTemplate_id(WeiXinTemplateUtils.WX_Template_Order_Refund);
			t.setTouser(order.getOpenid());
			t.setUrl(WxConfig.WX_JS_HOST + "/wx/order/detail/" + order.getId()); // 跳转到哪里
			t.add("first", "您好，您购买的商品[" + order.getOrderProductName() + "]，已退款。", "#CC0000");
			t.add("reason", "系统出货失败！", "#173177"); // 价格
			t.add("refund", order.getTotalAmount().toString(), "#173177");
			t.add("remark", "\n可能是您配送的区域超出了，或者是购买的商品下架了 给您造成的不便敬请谅解，点击查询详细信息..", "#CC0000");
			WxTools.sendTemplate(WxTools.getAccessToken(), t.build());
		}

		// APP
		/*if (Order.plateform_App == order.getOrderPlatform()) {
			this.app_outer_order_group_Detail(order.getOpenid(), JpushMsgType.Order_Detail, "退款提醒", "给您造成不便敬请谅解，点击查询详细信息", order.getId());
		}*/

	}

	/**
	 * 订单支付成功
	 * @param order
	 */
	public void buy_success(Order order) {
		if(StringUtil.isBlank(order.getExpressPhone())){
			log.error("buy_success  发送的手机号码为空");
			return ;
		}
		if(is_sendMsg){
			return ;
		}
		/*if (CacheUtils.get(cache_send_paySuccess_key + order.getExpressPhone()) == null) {
			Boolean send_state = MessageUtils.sendTemplateSMS(order.getExpressPhone(), MessageUtils.pay_success);
			log.info("支付成功短信发送状态:" + send_state);
			if (send_state) {
				CacheUtils.set(cache_send_paySuccess_key + order.getExpressPhone(), "1", cache_send_time);
			}
		}*/
	}

	/**
	 * 订单发货提醒
	 */
	public void orderSendExp(Order order) {
		// 微信公众号
		if (Order.plateform_Weixin == order.getOrderPlatform()) {
			TemplateData t = TemplateData.New();
			t.setTemplate_id(WeiXinTemplateUtils.WX_Template_Express_Ok);
			t.setTouser(order.getOpenid());
			t.setUrl(WxConfig.WX_JS_HOST + "/wx/order/detail/" + order.getId()); // 跳转到哪里
			t.add("first", "嗖嗖嗖，您购买的商品已发货，我们正加速送到您的手上，物流信息一般次日更新物流状态。", "#173177");
			t.add("keyword1", order.getOrderProductName(), "#173177");
			t.add("keyword2", order.getExpressName(), "#173177");
			t.add("keyword3", order.getExpressNo(), "#173177");
			t.add("keyword4", order.getExpressName() + "," + order.getExpressAddress(), "#173177");
			t.add("remark", "请您耐心等候。物流信息，一般次日更新物流状态", "#173177");
			WxTools.sendTemplate(WxTools.getAccessToken(), t.build());
		}
		// APP
		/*if (Order.plateform_App == order.getOrderPlatform()) {
			Wxuser wxuser = Wxuser.dao.findById(order.getOpenid());
			if (wxuser != null) {
				this.app_outer_order_group_Detail(order.getOpenid(), JpushMsgType.Order_Detail, "订单已发货", String.format("嗖嗖嗖，您购买的商品已发货，由%s正加速送到您的手上。", order.getExpressName()), order.getId());
			}
		}*/
		if (Order.plateform_Web == order.getOrderPlatform()) {
			if(!is_sendMsg){
				return ;
			}
			//如果是网页的接口
			/*if (CacheUtils.get(cache_send_express_key + order.getExpressPhone()) == null) {
				Boolean send_state = MessageUtils.sendTemplateSMS(order.getExpressPhone(), MessageUtils.send_express, order.getOrderProductName());
				log.info("支付成功短信发送状态:" + send_state);
				if (send_state) {
					CacheUtils.set(cache_send_express_key + order.getExpressPhone(), "1", cache_send_time);
				}
			}*/
		}
	}

	/**
	 * 开团提醒
	 * @param order
	 */
	public void openGroupDetail(Order order) {
		// 微信公众号
		if (Order.plateform_Weixin == order.getOrderPlatform()) {
			TemplateData t = TemplateData.New();
			t.setTemplate_id(WeiXinTemplateUtils.WX_Template_Pay_Ok);
			t.setTouser(order.getOpenid());
			t.setUrl(WxConfig.WX_JS_HOST + "/wx/group/detail/" + order.getGroupOrderId()); // 跳转到哪里
			t.add("first", "开团成功后邀请小伙伴们一起来拼团吧，点击查看团详细信息。", "#CC0000");
			t.add("keyword1", order.getTotalAmount() + "", "#173177"); // 价格
			t.add("keyword2", order.getOrderProductName(), "#173177");
			t.add("keyword3", "微信支付", "#173177");
			t.add("keyword4", order.getId(), "#173177");
			t.add("keyword5", DateUtil.getDate("yyyy-MM-dd HH:mm:ss"), "#173177");
			t.add("remark", "\n点击查看团详细信息..", "#CC0000");
			WxTools.sendTemplate(WxTools.getAccessToken(), t.build());
		}

		/*// APP
		if (Order.plateform_App == order.getOrderPlatform()) {
			this.app_outer_order_group_Detail(order.getOpenid(), JpushMsgType.Group_Detail, "开团提醒", "开团成功后邀请小伙伴们一起来拼团吧", order.getGroupOrderId());
		}*/
	}

	/**
	 * 参团其他人提醒
	 * @param order 主订单
	 * @param otherOrder 其他参团的订单
	 */
	public void groupDetail(Order order, Order otherOrder, String remark) {
		// 微信公众号
		if (Order.plateform_Weixin == order.getOrderPlatform()) {
			TemplateData t = TemplateData.New();
			t.setTemplate_id(WeiXinTemplateUtils.WX_Template_Group_Success);
			t.setUrl(WxConfig.WX_JS_HOST + "/wx/index"); // 跳转到哪里
			t.add("first", String.format("您好，您购买的,[%s],已经拼团成功。", order.getOrderProductName()), "#173177");
			t.add("remark", remark, "#173177");

			t.setTouser(otherOrder.getOpenid());
			t.add("keyword1", otherOrder.getTotalAmount() + "", "#173177"); // 价格
			t.add("keyword2", otherOrder.getId(), "#173177"); // 价格
			WxTools.sendTemplate(WxTools.getAccessToken(), t.build());
		}

		// APP
		/*if (Order.plateform_App == order.getOrderPlatform()) {
			this.app_outer_order_group_Detail(order.getOpenid(), JpushMsgType.Group_Detail, "拼团成功", "点击查看详情", order.getGroupOrderId());
		}*/
	}

	/**
	 * 参团成功提醒
	 * @param order 订单
	 * @param g_order 拼团订单
	 */
	public void groupDetail(Order order, OrderGroup g_order) {
		// 微信公众号
		if (Order.plateform_Weixin == order.getOrderPlatform()) {
			TemplateData t = TemplateData.New();
			t.add("first", "恭喜您参团成功，请等待成团。", "#173177");
			t.setTouser(order.getOpenid());
			t.setTemplate_id(WeiXinTemplateUtils.WX_Template_Group_In_Success);
			t.setUrl(WxConfig.WX_JS_HOST + "/wx/group/detail/" + order.getGroupOrderId()); // 跳转到哪里
			t.add("keyword1", g_order.getOrderId(), "#173177"); // 团购人数
			t.add("keyword2", order.getOrderProductName(), "#173177"); // 商品名称
			t.add("keyword3", order.getItemAmount().toString(), "#173177"); // 团购人数
			t.add("keyword4", g_order.getPersonCount().toString(), "#173177"); // 团购人数
			t.add("remark", "开团成功后邀请小伙伴们一起来拼团吧，点击查看团详细信息。", "#173177");
			WxTools.sendTemplate(WxTools.getAccessToken(), t.build());
		}

		// APP
		/*if (Order.plateform_App == order.getOrderPlatform()) {
			this.app_outer_order_group_Detail(order.getOpenid(), JpushMsgType.Group_Detail, "参团成功提醒", "请邀请小伙伴们一起来拼团吧", order.getGroupOrderId());
		}*/

	}

	/**
	 * app推送
	 * @param jpushid
	 * @param type
	 * @param title
	 * @param centent
	 * @param id
	 */
	/*public void jpush(String jpushid, String type, String title, String centent, String id) {
		JpushModel bean = new JpushModel();
		bean.setPush_type(PushType.outer);
		bean.setTitle(title);
		bean.setCentent(centent);
		bean.setJpushid(jpushid);
		bean.setType(type);
		Ret ret = Ret.create();
		if (type.equals(JpushMsgType.Order_Detail)) {
			ret.put("orderid", id);
		} else if (type.equals(JpushMsgType.Group_Detail)) {
			ret.put("groupid", id);
		} else if (type.equals(JpushMsgType.User_Coupon_time_out)) {
			ret.put("couponid", id);
		}
		bean.setData(ret.getData());
		bean.startPush();
	}*/

	/**
	 * APP推送外部消息（动作：打开订单或拼团详情）
	 * @param user_id 用户id
	 * @param type 类型（订单orderid，拼团groupid）
	 * @param title 标题
	 * @param centent 内容
	 * @param id 订单id,拼团id
	 */
	/*public void app_outer_order_group_Detail(String user_id, String type, String title, String centent, String id) {
		try {
			weixu wxuser = Wxuser.dao.findById(user_id);
			//不等于null  jpushid  不是为空的  不是离线的 
			if (wxuser != null && StringUtil.isNotBlank(wxuser.getJpushid()) && !wxuser.getJpushid().equals("offline")) {
				jpush(wxuser.getJpushid(), type, title, centent, id);
			}
		} catch (Exception e) {
			log.error("app推送失败[app_outer_order_group_Detail]");
		}
	}*/

}
